home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 2 / AACD 2.iso / AACD / Magazine / ActiveShareware / BPrefs / Source / bPrefs.e < prev    next >
Text File  |  1999-09-16  |  42KB  |  990 lines

  1. OPT PREPROCESS
  2.  
  3. MODULE 'amigalib/boopsi',
  4.        'dos/dos','dos/dosextens',
  5.        'exec/execbase','exec/lists','exec/nodes','exec/tasks',
  6.        'intuition/classes','intuition/classusr','intuition/intuition','intuition/screens',
  7.        'libraries/asl','libraries/gadtools','libraries/mui','libraries/muip',
  8.        'mui/muicustomclass','muimaster',/*'mui/Busy_mcc',*/
  9.        'utility','utility/tagitem','utility/hooks',
  10.        '*bprefslocale'
  11.  
  12. ENUM ID_VIEW=1,ID_USE,ID_TEST,ID_SAVE,ID_VIEWACT,ID_SETCOL,
  13.      ID_ABOUT,ID_MABOUT,ID_PREFS,ID_VALRES,ID_VALLST,ID_VALINI,ID_HIDE,ID_ADDP,ID_DELP,
  14.      ID_REFRS,ID_REFRL,
  15.      ID_DOUBLE
  16.  
  17. #define PROGVER '$VER: Birdie Prefs 1.31 (16/09/99)'
  18.  
  19. DEF app,window,sigs=0,running,result,
  20.     active_cc,patternlist:PTR TO LONG,patternlen,
  21.     menu,gmenu,gmenuobj,
  22.     vmenu,vmenuobj,
  23.     tested, /*TRUE if the test button has been pressed at least once*/
  24.     adr_lra,adr_lga,adr_lba,  /*Light Balance*/
  25.     adr_dra,adr_dga,adr_dba,  /*Dark Balance*/
  26.     adr_view,adr_current,adr_l,adr_lv,adr_addp,adr_delp,     /*Patternlist*/
  27.     adr_active,adr_activen,adr_activec,adr_colour,adr_activelvl,adr_activepasl,adr_viewact, /*Active Window*/
  28.     adr_nobmp,adr_noborder,adr_flood,adr_nolight,adr_precision,adr_exclude,adr_doexcl,adr_pubscreens, /*Options*/
  29.     adr_save,adr_use,adr_test,adr_cancel,
  30.     adr_stat,/*adr_busy,*/
  31.     red,green,blue,
  32.  
  33. ->  penspec:PTR TO mui_penspec,
  34.     cmd[900]:STRING,s:PTR TO CHAR,n,tmp[100]:STRING,
  35.     tstdout,thandler                /*I've limited the command line to about 600 chars, I think
  36.                                       it will be enough*/
  37.  
  38. CONST FL_NONE=0
  39. SET FL_EXIT,FL_SAVE
  40.  
  41. DEF task
  42.  
  43. DEF startStat,pos,
  44.     btmp[900]:STRING,space,activep=FALSE,s2[60]:STRING
  45. DEF cat:PTR TO catalog_bprefs
  46.  
  47. DEF cl_pslider:PTR TO mui_customclass
  48.  
  49. /***********************************
  50. cmenu custom private class:subclass of any class, but handles a contextmenu
  51.                                     ***************************************/
  52.  
  53. #define mCheckMark(selected) NewObjectA(cl_mimage.mcc_class,NIL,[ImageButtonFrame,\
  54.         MUIA_InputMode,     MUIV_InputMode_Toggle,\
  55.         MUIA_Image_Spec,    MUII_CheckMark,\
  56.         MUIA_Image_FreeVert,MUI_TRUE,\
  57.         MUIA_Selected,      selected,\
  58.         MUIA_Background,    MUII_ButtonBack,\
  59.         MUIA_ShowSelState,  FALSE,\
  60.         MUIA_ContextMenu,gmenuobj,\
  61.         MUIA_Cmenu_Default,selected,\
  62.         MUIA_Cmenu_Attribute,MUIA_Selected,\
  63.     End
  64.  
  65. #define mSliderObject(lvl) NewObjectA(cl_mslider.mcc_class,NIL,[MUIA_ContextMenu,gmenuobj,\
  66.         MUIA_Cmenu_Attribute,MUIA_Slider_Level,\
  67.         MUIA_Cmenu_Default,lvl,\
  68.         MUIA_Slider_Level,lvl
  69.  
  70.  
  71. #define mStringObject NewObjectA(cl_mstring.mcc_class,NIL,[MUIA_ContextMenu,gmenuobj,\
  72.         MUIA_Cmenu_Default,'',\
  73.         MUIA_Cmenu_Attribute,MUIA_String_Contents
  74.  
  75. #define mVGroup NewObjectA(cl_mgroup.mcc_class,NIL,[MUIA_ContextMenu,vmenuobj
  76.  
  77. #define mHGroup NewObjectA(cl_mgroup.mcc_class,NIL,[MUIA_Group_Horiz,MUI_TRUE,MUIA_ContextMenu,gmenuobj
  78.  
  79. DEF cl_mslider:PTR TO mui_customclass
  80. DEF cl_mimage: PTR TO mui_customclass
  81. DEF cl_mstring:PTR TO mui_customclass
  82. DEF cl_mgroup: PTR TO mui_customclass -> mgroup is not exactely like image or slider, it sends the method to all his children
  83.  
  84. ENUM MUIA_Cmenu_Attribute=$FCB90000,
  85.      MUIA_Cmenu_Default,
  86.      MUIA_Cmenu_Initial
  87.  
  88. OBJECT mgroup_data
  89.     empty:INT
  90. ENDOBJECT
  91. /*dispatcher for the mGroup class, that sends the contextmenuchoice method to all its children*/
  92. PROC mgroup_dispatcher(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO msg)
  93. DEF state,member
  94.     IF msg.methodid = MUIM_ContextMenuChoice
  95.         get(obj,MUIA_Group_ChildList,{state})
  96.         NextObject({state})
  97.         WHILE (member:=NextObject({state}))
  98.             doMethodA(member,msg)
  99.         ENDWHILE
  100.         RETURN NIL
  101.     ENDIF
  102. ENDPROC doSuperMethodA(cl,obj,msg)
  103.  
  104. OBJECT cmenu_data
  105.     attr -> the name of the attribute to change, e.g. MUIA_Slider_Level
  106.     default,initial
  107. ENDOBJECT
  108.  
  109. PROC cmenu_dispatcher(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO msg)
  110. DEF methodid
  111.     methodid:=msg.methodid
  112.     SELECT methodid
  113.     CASE OM_NEW ;                 RETURN cmenu_new(cl,obj,msg)
  114.     CASE OM_SET ;                 RETURN cmenu_set(cl,obj,msg)
  115.     CASE MUIM_ContextMenuChoice ; RETURN cmenu_contextmenuchoice(cl,obj,msg)
  116.     ENDSELECT
  117. ENDPROC doSuperMethodA(cl,obj,msg)
  118.  
  119. PROC cmenu_new(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO opset)
  120. DEF data:PTR TO cmenu_data,
  121.     tags:PTR TO tagitem,
  122.     tag:PTR TO tagitem,
  123.     attrid,c=TRUE
  124.  
  125.     IF (obj:=doSuperMethodA(cl,obj,msg))=NIL THEN RETURN NIL
  126.     data:=INST_DATA(cl,obj)/*like the "set" method, I should create a single procedure to it..*/
  127.     tags:=msg.attrlist
  128.     WHILE tag:=NextTagItem({tags})
  129.         IF tag.data
  130.             attrid:=tag.tag
  131.             SELECT attrid
  132.             CASE MUIA_Cmenu_Attribute
  133.                 data.attr:=tag.data
  134.             CASE MUIA_Cmenu_Default
  135.                 data.default:=tag.data
  136.             CASE MUIA_Cmenu_Initial
  137.                 data.initial:=tag.data ; c:=FALSE
  138.             ENDSELECT
  139.         ENDIF
  140.     ENDWHILE
  141.     IF c THEN data.initial:=data.default
  142. ENDPROC obj
  143.  
  144. PROC cmenu_set(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO opset)
  145. DEF data:PTR TO cmenu_data,
  146.     tags:PTR TO tagitem,
  147.     tag:PTR TO tagitem,
  148.     attrid
  149.  
  150.     data:=INST_DATA(cl,obj)
  151.     tags:=msg.attrlist
  152.     WHILE tag:=NextTagItem({tags})
  153.         IF tag.data
  154.             attrid:=tag.tag
  155.             SELECT attrid
  156.             CASE MUIA_Cmenu_Attribute
  157.                 data.attr:=tag.data
  158.             CASE MUIA_Cmenu_Default
  159.                 data.default:=tag.data
  160.             CASE MUIA_Cmenu_Initial
  161.                 data.initial:=tag.data
  162.             ENDSELECT
  163.         ENDIF
  164.     ENDWHILE
  165. ENDPROC doSuperMethodA(cl,obj,msg)
  166.  
  167. PROC cmenu_contextmenuchoice(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO LONG)
  168. DEF menuitem,str:PTR TO CHAR,data:PTR TO cmenu_data
  169.     data:=INST_DATA(cl,obj)
  170.     menuitem:=msg[1] -> That looks quite ugly, but what should I put as msg type?
  171.     get(menuitem,MUIA_Menuitem_Title,{str})
  172.     IF StrCmp(str,cat.msgmReset.getstr())
  173.         set(obj,data.attr,data.default)
  174.     ELSEIF StrCmp(str,cat.msgmInitial.getstr())
  175.         set(obj,data.attr,data.initial)
  176.     ENDIF
  177. ENDPROC
  178.  
  179. /*************
  180. pSlider cc: just a subclass of Slider class, replacing the value by "exact"
  181. when it is -1. It also has a context menu
  182. *************/
  183.  
  184. #define pSliderObject NewObjectA(cl_pslider.mcc_class,NIL,[TAG_IGNORE,0
  185.  
  186. OBJECT pslider_data
  187.     string:PTR TO CHAR
  188. ENDOBJECT
  189.  
  190. PROC pslider_dispatcher(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO msg)
  191. DEF methodid
  192.     methodid:=msg.methodid
  193.     SELECT methodid
  194.     CASE OM_NEW ; RETURN pslider_new(cl,obj,msg)
  195.     CASE OM_DISPOSE ; RETURN pslider_dispose(cl,obj,msg)
  196.     CASE MUIM_Numeric_Stringify ; RETURN pslider_stringify(cl,obj,msg)
  197.     ENDSELECT
  198. ENDPROC doSuperMethodA(cl,obj,msg)
  199.  
  200. PROC pslider_new(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO msg)
  201. DEF data:PTR TO pslider_data
  202.     IF (obj:=doSuperMethodA(cl,obj,msg)) = NIL THEN RETURN NIL
  203.     data:=INST_DATA(cl,obj)
  204.     data.string:=String(10)
  205. ENDPROC obj
  206.  
  207. PROC pslider_dispose(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO msg)
  208. DEF data:PTR TO pslider_data
  209.     data:=INST_DATA(cl,obj)
  210.     DisposeLink(data.string)
  211. ENDPROC doSuperMethodA(cl,obj,msg)
  212.  
  213. PROC pslider_stringify(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO muip_numeric_stringify)
  214. DEF data:PTR TO pslider_data
  215.     data:=INST_DATA(cl,obj)
  216.     IF msg.value=-1
  217.         StrCopy(data.string,cat.msglExact.getstr())
  218.     ELSE
  219.         StringF(data.string,'\d',msg.value)
  220.     ENDIF
  221. ENDPROC data.string
  222.  
  223. PROC main() HANDLE  
  224.  
  225.     IF (localebase:=OpenLibrary('locale.library',0)) = NIL THEN
  226.         Raise('Couldn''t open locale.library') -> Don't put this in catalogs ;-)
  227.     NEW cat.create()
  228.     cat.open()
  229.  
  230.     IF (utilitybase:=OpenLibrary('utility.library',36))=NIL THEN
  231.         Raise(cat.msgfNoUtility.getstr())
  232.  
  233.     NEW patternlist[21]
  234.  
  235.     muimasterbase:=OpenLibrary(MUIMASTER_NAME,MUIMASTER_VMIN)
  236.     IF muimasterbase = NIL THEN
  237.         Raise(cat.msgfNoMui.getstr())
  238.  
  239.     IF (cl_mslider:=eMui_CreateCustomClass(NIL,MUIC_Slider,NIL,SIZEOF cmenu_data,{cmenu_dispatcher})) = NIL THEN
  240.         Raise(cat.msgfCslider.getstr())
  241.  
  242.     IF (cl_mimage:=eMui_CreateCustomClass(NIL,MUIC_Image,NIL,SIZEOF cmenu_data,{cmenu_dispatcher})) = NIL THEN
  243.         Raise(cat.msgfCimage.getstr())
  244.  
  245.     IF (cl_mstring:=eMui_CreateCustomClass(NIL,MUIC_String,NIL,SIZEOF cmenu_data,{cmenu_dispatcher})) = NIL THEN
  246.         Raise(cat.msgfCstring.getstr())
  247.  
  248.     IF (cl_mgroup:=eMui_CreateCustomClass(NIL,MUIC_Group,NIL,SIZEOF mgroup_data,{mgroup_dispatcher})) = NIL THEN
  249.         Raise(cat.msgfCgroup.getstr())
  250.  
  251.     IF (cl_pslider:=eMui_CreateCustomClass(NIL,MUIC_Slider,NIL,SIZEOF pslider_data,{pslider_dispatcher})) = NIL THEN
  252.         Raise(cat.msgfCpslider.getstr())
  253.  
  254.     active_cc:=[cat.msglColour.getstr(),cat.msglPattern.getstr(),NIL]
  255.  
  256.     menu:=[
  257.     NM_TITLE,0, cat.msgmProject.getstr(),       0,  0, 0, 0,
  258.         NM_ITEM, 0, cat.msgmAbout.getstr(),   '?', 0, 0, ID_ABOUT,
  259.         NM_ITEM, 0, cat.msgmAboutMui.getstr(),'''',0, 0, ID_MABOUT,
  260.         NM_ITEM, 0, cat.msgmSettings.getstr(),'P', 0, 0, ID_PREFS,
  261.         NM_ITEM, 0, NM_BARLABEL,               0,  0, 0, 0,
  262.         NM_ITEM, 0, cat.msgmSave.getstr(),    'S', 0, 0, ID_SAVE,
  263.         NM_ITEM, 0, cat.msgmUse.getstr(),     'U', 0, 0, ID_USE,
  264.         NM_ITEM, 0, cat.msgmTest.getstr(),    'T', 0, 0, ID_TEST,
  265.         NM_ITEM, 0, cat.msgmHide.getstr(),    'H', 0, 0, ID_HIDE,
  266.         NM_ITEM, 0, cat.msgmQuit.getstr(),    'Q', 0, 0, MUIV_Application_ReturnID_Quit,
  267.  
  268.     NM_TITLE,0, cat.msgmPrefs.getstr(),0,0,0,0,
  269.         NM_ITEM, 0, cat.msgmReset.getstr(),   'W', 0, 0, ID_VALRES,
  270.         NM_ITEM, 0, cat.msgmLast.getstr(),    'O', 0, 0, ID_VALLST,
  271.         NM_ITEM, 0, cat.msgmInitial.getstr(), 'I', 0, 0, ID_VALINI,
  272.  
  273.     NM_END,0,NIL,0,0,0,0]:newmenu
  274.  
  275.     gmenu:=[
  276.     NM_TITLE,    0, cat.msgmGadget.getstr(),  0,0,0,0,
  277.         NM_ITEM, 0, cat.msgmReset.getstr(),  0,0,0,0,
  278.       /*NM_ITEM, 0, cat.msgmLast.getstr(),   0,0,0,0,*/ -> The last_saved function is a little more difficult to do...
  279.         NM_ITEM, 0, cat.msgmInitial.getstr(),0,0,0,0,
  280.     NM_END,0,NIL,0,0,0,0]:newmenu
  281.     gmenuobj:=Mui_MakeObjectA(MUIO_MenustripNM,[gmenu,0])
  282.  
  283.     vmenu:=[
  284.     NM_TITLE,    0, cat.msgmGroup.getstr(),  0,0,0,0,
  285.         NM_ITEM, 0, cat.msgmReset.getstr(),  0,0,0,0,
  286.       /*NM_ITEM, 0, cat.msgmLast.getstr(),   0,0,0,0,*/ -> The last_saved function is a little more difficult to do...
  287.         NM_ITEM, 0, cat.msgmInitial.getstr(),0,0,0,0,
  288.     NM_END,0,NIL,0,0,0,0]:newmenu
  289.     vmenuobj:=Mui_MakeObjectA(MUIO_MenustripNM,[vmenu,0])
  290.  
  291.  
  292.     app:=ApplicationObject,
  293.         MUIA_Application_Title, 'Birdie prefs',
  294.         MUIA_Application_Version,PROGVER,
  295.         MUIA_Application_Author, 'Maxime Gamboni',
  296.         MUIA_Application_Description, cat.msgrDescr.getstr(),
  297.         MUIA_Application_Base,'BIRDIE_PREFS',
  298.         MUIA_Application_Menustrip, Mui_MakeObjectA(MUIO_MenustripNM,[menu,0]),
  299.         MUIA_Application_SingleTask,MUI_TRUE,
  300.         MUIA_Application_Sleep,MUI_TRUE,
  301.  
  302.         SubWindow, window:=WindowObject,
  303.             MUIA_Window_Title, 'Birdie prefs',
  304.             MUIA_Window_ScreenTitle, cat.msgrTitle.getstr(),
  305.             MUIA_Window_ID, 'BIRDIEP',
  306.  
  307.             WindowContents, VGroup,
  308.                 Child, HGroup,
  309.                     Child, VGroup,
  310.                         Child, RectangleObject,End,
  311.                         Child, mVGroup,
  312.                             MUIA_Frame,MUIV_Frame_Group,
  313.                             MUIA_FrameTitle,cat.msglLightBal.getstr(),
  314.                             MUIA_ShortHelp, cat.msghLightBal.getstr(),
  315.                             Child, adr_lra:=mSliderObject(60),MUIA_Slider_Max,255,MUIA_Slider_Min,-255,
  316.                                 MUIA_FrameTitle, cat.msglRed.getstr(),
  317.                             End,
  318.                             Child, adr_lga:=mSliderObject(60),MUIA_Slider_Max,255,MUIA_Slider_Min,-255,
  319.                                 MUIA_FrameTitle, cat.msglGreen.getstr(),
  320.                             End,
  321.                             Child, adr_lba:=mSliderObject(60),MUIA_Slider_Max,255,MUIA_Slider_Min,-255,
  322.                                 MUIA_FrameTitle, cat.msglBlue.getstr(),
  323.                             End,
  324.                         End,
  325.                         Child, RectangleObject,End,
  326.                         Child, mVGroup,
  327.                             MUIA_Frame,MUIV_Frame_Group,
  328.                             MUIA_FrameTitle,cat.msglOptions.getstr(),
  329.                             Child,mHGroup,
  330.                                 MUIA_ShortHelp,cat.msghNoBmp.getstr(),
  331.                                 Child, adr_nobmp:=mCheckMark(FALSE),
  332.                                 Child, Label(cat.msglNoBmp.getstr()),
  333.                                 Child, RectangleObject, End,
  334.                             End,
  335.                             Child, mHGroup,
  336.                                 MUIA_ShortHelp,cat.msghNoIborder.getstr(),
  337.                                 Child, adr_noborder:=mCheckMark(FALSE),
  338.                                 Child, Label(cat.msglNoIborder.getstr()),
  339.                                 Child, RectangleObject, End,
  340.                             End,
  341.                             Child, mHGroup,
  342.                                 MUIA_ShortHelp,cat.msghFloodMask.getstr(),
  343.                                 Child, adr_flood:=mCheckMark(FALSE),
  344.                                 Child, Label(cat.msglFloodMask.getstr()),
  345.                                 Child, RectangleObject, End,
  346.                             End,
  347.                             Child, mHGroup,
  348.                                 MUIA_ShortHelp,cat.msghNoLight.getstr(),
  349.                                 Child, adr_nolight:=mCheckMark(FALSE),
  350.                                 Child, Label(cat.msglNoLight.getstr()),
  351.                                 Child, RectangleObject, End,
  352.                             End,
  353.                             Child, mHGroup,
  354.                                 MUIA_ShortHelp,cat.msghPubScr.getstr(),
  355.                                 Child, adr_pubscreens:=mCheckMark(FALSE),
  356.                                 Child, Label(cat.msglPubScr.getstr()),
  357.                                 Child, RectangleObject, End,
  358.                             End,
  359.                             Child, HGroup,
  360.                                 Child,RectangleObject,End,
  361.                                 Child, Label(cat.msglExclude.getstr()),
  362.                                 Child, RectangleObject,End,
  363.                             End,
  364.                             Child, mHGroup,
  365.                                 MUIA_ShortHelp,cat.msghExclude.getstr(),
  366.                                 Child, adr_doexcl:=mCheckMark(FALSE),
  367.                                 Child,adr_exclude:=mStringObject,
  368.                                     StringFrame,
  369.                                     MUIA_String_Format,MUIV_String_Format_Left,
  370.                                 End,
  371.                             End,
  372.                             Child, adr_precision:=pSliderObject,MUIA_Slider_Max,31,MUIA_Slider_Min,-1,
  373.                                 MUIA_Slider_Level,-1,
  374.                                 MUIA_ShortHelp,cat.msghPrecision.getstr(),
  375.                                 MUIA_FrameTitle, cat.msglPrecision.getstr(),
  376.                             End,
  377.                         End,
  378.                         Child, RectangleObject,End,
  379.                     End,
  380.                     Child, VGroup,
  381.                         MUIA_Frame,MUIV_Frame_Group,
  382.                         MUIA_FrameTitle,cat.msglPlist.getstr(),
  383.                         Child,adr_lv:=ListviewObject,
  384.                             MUIA_ShortHelp,cat.msghPlist.getstr(),
  385.                             MUIA_Listview_Input, MUI_TRUE,
  386.                             MUIA_Listview_List, adr_l:=ListObject,
  387.                                 InputListFrame,
  388.                             End,
  389.                         End,
  390.                         Child, PopaslObject,
  391.                             MUIA_ShortHelp,cat.msghPname.getstr(),
  392.                             MUIA_Popstring_Button,PopButton(MUII_PopFile),
  393.                             MUIA_Popasl_Type,ASL_FILEREQUEST,
  394.                             MUIA_Popstring_String,
  395.                                 adr_current:=StringObject,
  396.                                 StringFrame,
  397.                                 MUIA_String_Format,MUIV_String_Format_Left,
  398.                             End,
  399.                         End,
  400.                         Child, HGroup,
  401.                             Child, adr_addp:=TextObject,
  402.                                 MUIA_Background,MUII_ButtonBack,
  403.                                 MUIA_Frame,MUIV_Frame_Button,
  404.                                 MUIA_InputMode,MUIV_InputMode_RelVerify,
  405.                                 MUIA_Text_PreParse,'\ec',
  406.                                 MUIA_Text_Contents,cat.msglAdd.getstr(),
  407.                                 MUIA_ShortHelp,cat.msghAdd.getstr(),
  408.                             End,
  409.                             Child, adr_delp:=TextObject,
  410.                                 MUIA_Background,MUII_ButtonBack,
  411.                                 MUIA_Frame,MUIV_Frame_Button,
  412.                                 MUIA_InputMode,MUIV_InputMode_RelVerify,
  413.                                 MUIA_Text_PreParse,'\ec',
  414.                                 MUIA_Text_Contents,cat.msglDel.getstr(),
  415.                                 MUIA_ShortHelp,cat.msghDel.getstr(),
  416.                             End,
  417.                             Child, adr_view:= TextObject,
  418.                                 MUIA_Background,MUII_ButtonBack,
  419.                                 MUIA_Frame,MUIV_Frame_Button,
  420.                                 MUIA_InputMode,MUIV_InputMode_RelVerify,
  421.                                 MUIA_Text_PreParse,'\ec',
  422.                                 MUIA_Text_Contents,cat.msglView.getstr(),
  423.                                 MUIA_ShortHelp,cat.msghView.getstr(),
  424.                             End,
  425.                         End,
  426.                     End,
  427.                     Child, VGroup,
  428.                         Child, RectangleObject, MUIA_Weight,10,End,
  429.                         Child, mVGroup,
  430.                             MUIA_Frame,MUIV_Frame_Group,
  431.                             MUIA_FrameTitle, cat.msglDarkBal.getstr(),
  432.                             MUIA_ShortHelp, cat.msghDarkBal.getstr(),
  433.                             Child, adr_dra:=mSliderObject(-60),MUIA_Slider_Max,255,MUIA_Slider_Min,-255,
  434.                                 MUIA_FrameTitle, cat.msglRed.getstr(),
  435.                             End,
  436.                             Child, adr_dga:=mSliderObject(-60),MUIA_Slider_Max,255,MUIA_Slider_Min,-255,
  437.                                 MUIA_FrameTitle, cat.msglGreen.getstr(),
  438.                             End,
  439.                             Child, adr_dba:=mSliderObject(-60),MUIA_Slider_Max,255,MUIA_Slider_Min,-255,
  440.                                 MUIA_FrameTitle, cat.msglBlue.getstr(),
  441.                             End,
  442.                         End,
  443.                         Child, RectangleObject,MUIA_Weight,10,End,
  444.                         Child, VGroup,
  445.                             MUIA_Frame,MUIV_Frame_Group,
  446.                             MUIA_FrameTitle,cat.msglActive.getstr(),
  447.                             Child,HGroup,
  448.                                 MUIA_ShortHelp,cat.msghAct.getstr(),
  449.                                 Child, adr_active:=mCheckMark(MUI_TRUE),
  450.                                 Child, Label(cat.msglAct.getstr()),
  451.                                 Child, RectangleObject, End,
  452.                             End,
  453.                             Child,adr_activec:=RegisterGroup(active_cc),
  454.                                 Child,VGroup,
  455.                                     Child, adr_colour:=ColoradjustObject,End,
  456.                                     Child,adr_activelvl:=mSliderObject(50),
  457.                                         MUIA_Slider_Min,0,
  458.                                         MUIA_Slider_Max,100,
  459.                                         MUIA_FrameTitle,cat.msglImposeLvl.getstr(),
  460.                                     End,
  461.                                 End,
  462.                                 Child, VGroup,
  463.                                     Child,adr_activepasl:=PopaslObject,
  464.                                         MUIA_ShortHelp,cat.msghSfile.getstr(),
  465.                                         MUIA_Popstring_Button,PopButton(MUII_PopFile),
  466.                                         MUIA_Popasl_Type,ASL_FILEREQUEST,
  467.                                         MUIA_Popstring_String,
  468.                                             adr_activen:=StringObject,
  469.                                             StringFrame,
  470.                                             MUIA_String_Format,MUIV_String_Format_Left,
  471.                                         End,
  472.                                     End,
  473.                                     Child, adr_viewact:= TextObject,
  474.                                         MUIA_Background,MUII_ButtonBack,
  475.                                         MUIA_Frame,MUIV_Frame_Button,
  476.                                         MUIA_InputMode,MUIV_InputMode_RelVerify,
  477.                                         MUIA_Text_PreParse,'\ec',
  478.                                         MUIA_Text_Contents,cat.msglView.getstr(),
  479.                                         MUIA_ShortHelp,cat.msghView.getstr(),
  480.                                         MUIA_Weight,5,
  481.                                     End,
  482.                                 End,
  483.                             End,
  484.                         End,
  485.                         Child, RectangleObject, MUIA_Weight,10,End,
  486.                     End,
  487.                 End,
  488.                 Child, HGroup,
  489.                     Child, adr_save:=SimpleButton(cat.msglSave.getstr()),
  490.                     Child, RectangleObject, End,
  491.                     Child, adr_use:=SimpleButton(cat.msglUse.getstr()),
  492.                     Child, RectangleObject, End,
  493.                     Child, adr_test:=SimpleButton(cat.msglTest.getstr()),
  494.                     Child, RectangleObject, End,
  495.                     Child, adr_cancel:=SimpleButton(cat.msglCancel.getstr()),
  496.                 End,
  497.                 Child, HGroup,
  498.                     Child,adr_stat:=TextObject,
  499.                         MUIA_Frame,MUIV_Frame_Text,
  500.                         MUIA_Background,MUII_TextBack,
  501.                         MUIA_Text_PreParse,'\ec',
  502.                         MUIA_Text_Contents,cat.msgiInitializing.getstr(),
  503.                     End,
  504. /*                    Child,adr_busy:=BusyObject, -> This is yet a project, to put a "busy" gadget.
  505.                         MUIA_Weight,30,           -> It does not yet work, it is why I commented it out.
  506.                     End,*/
  507.                 End,
  508.             End,
  509.         End,
  510.     End
  511.     IF app = NIL THEN
  512.         Raise(cat.msgfNoApp.getstr())
  513.  
  514.     doMethodA(adr_cancel, [MUIM_Notify,MUIA_Pressed,            FALSE,         window,3,MUIM_Set,MUIA_Window_CloseRequest,MUI_TRUE])
  515.  
  516.     doMethodA(window,     [MUIM_Notify,MUIA_Window_CloseRequest,MUI_TRUE,      app,   2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit])
  517.  
  518.     doMethodA(adr_viewact,[MUIM_Notify,MUIA_Pressed,            FALSE,         app,   2,MUIM_Application_ReturnID,ID_VIEWACT])
  519.     doMethodA(adr_addp,   [MUIM_Notify,MUIA_Pressed,            FALSE,         app,   3,MUIM_Application_ReturnID,ID_ADDP])
  520.     doMethodA(adr_delp,   [MUIM_Notify,MUIA_Pressed,            FALSE,         app,   3,MUIM_Application_ReturnID,ID_DELP])
  521.     doMethodA(adr_view,   [MUIM_Notify,MUIA_Pressed,            FALSE,         app,   2,MUIM_Application_ReturnID,ID_VIEW])
  522.     doMethodA(adr_use,    [MUIM_Notify,MUIA_Pressed,            FALSE,         app,   2,MUIM_Application_ReturnID,ID_USE])
  523.     doMethodA(adr_test,   [MUIM_Notify,MUIA_Pressed,            FALSE,         app,   2,MUIM_Application_ReturnID,ID_TEST])
  524.     doMethodA(adr_save,   [MUIM_Notify,MUIA_Pressed,            FALSE,         app,   2,MUIM_Application_ReturnID,ID_SAVE])
  525.  
  526.     doMethodA(adr_l,      [MUIM_Notify,MUIA_List_Active,        MUIV_EveryTime,app,   2,MUIM_Application_ReturnID,ID_REFRS])
  527.     doMethodA(adr_current,[MUIM_Notify,MUIA_String_Contents,    MUIV_EveryTime,app,   2,MUIM_Application_ReturnID,ID_REFRL])
  528.     doMethodA(app,        [MUIM_Notify,MUIA_Application_DoubleStart,MUI_TRUE,  app,   2,MUIM_Application_ReturnID,ID_DOUBLE])
  529.  
  530.     set(adr_current,MUIA_String_AttachedList,adr_lv)
  531.  
  532.     set(window,MUIA_Window_Open,MUI_TRUE)
  533.     set(adr_stat,MUIA_Text_Contents,cat.msgiLoad.getstr())
  534. /*LOAD BIRDIE PREFS*/
  535.     thandler:=Open('env:birdie.prefs',OLDFILE)
  536.     IF thandler = NIL
  537.         Mui_RequestA(app,window,0,NIL,cat.msgrOk.getstr(),cat.msgrNoBprefs.getstr(),NIL)
  538.     ELSE
  539.         startStat:=ReadStr(thandler,cmd)
  540.         Close(thandler)
  541.         parse(TRUE)
  542.     ENDIF
  543.     set(adr_stat,MUIA_Text_Contents,cat.msgiReady.getstr())
  544. /*    set(adr_busy,MUIA_Busy_Speed, MUIV_Busy_Speed_Off)*/
  545.     set(window,MUIA_Application_Sleep,FALSE)
  546.     running:=TRUE
  547.     WHILE running
  548.         result:= doMethodA(app, [MUIM_Application_Input,{sigs} ])
  549.         SELECT result
  550.         CASE MUIV_Application_ReturnID_Quit
  551.             IF tested
  552. /*                set(adr_busy,MUIA_Busy_Speed, MUIV_Busy_Speed_User)*/
  553.                 breakbirdie()
  554.                 waitquit()
  555.                 Execute('Run >NIL: Birdie ? <Env:Birdie.Prefs',NIL,NIL)
  556. /*                set(adr_busy,MUIA_Busy_Speed, MUIV_Busy_Speed_Off)*/
  557.             ENDIF
  558.             set(window,MUIA_Window_CloseRequest,MUI_TRUE)
  559.             running:=FALSE
  560.         CASE ID_DOUBLE
  561.             set(app,MUIA_Application_Iconified,FALSE)
  562.             set(window,MUIA_Window_Activate,MUI_TRUE)
  563.         CASE ID_ABOUT
  564.             Mui_RequestA(app, window, 0, NIL, cat.msgrOk.getstr(), '%s\n%s',[PROGVER,cat.msgrAbout.getstr(),NIL])
  565.         CASE ID_PREFS
  566.             doMethodA(app, [MUIM_Application_OpenConfigWindow,NIL]) /*Do we really need to use a returnID*/
  567.         CASE ID_MABOUT                                              /*when using menus? It would be better*/
  568.             doMethodA(app, [MUIM_Application_AboutMUI,window])      /*to directely call the methods..*/
  569.         CASE ID_HIDE
  570.             set(app,MUIA_Application_Iconified,MUI_TRUE)
  571.         CASE ID_VIEW
  572.             get(adr_current,MUIA_String_Contents,{s})
  573.             StringF(cmd,'run >NIL: multiview "\s"',s)
  574.             Execute(cmd,NIL,NIL)
  575.         CASE ID_ADDP
  576.             patternlist[patternlen++]:=String(80)
  577.             patternlist[patternlen]:=NIL
  578.             doMethodA(adr_l,[MUIM_List_InsertSingle,patternlist[patternlen-1],MUIV_List_Insert_Bottom])
  579.             set(adr_l,MUIA_List_Active,patternlen-1)
  580.         CASE ID_DELP
  581.             doMethodA(adr_l,[MUIM_List_GetEntry,MUIV_List_GetEntry_Active,{s}])
  582.             doMethodA(adr_l,[MUIM_List_Remove,MUIV_List_Remove_Active])
  583.             DisposeLink(s)
  584.             patternlen--
  585.         CASE ID_REFRS
  586.             doMethodA(adr_l,[MUIM_List_GetEntry,MUIV_List_GetEntry_Active,{s}])
  587.             set(adr_current,MUIA_String_Contents,s)
  588.         CASE ID_REFRL
  589.             get(adr_current,MUIA_String_Contents,{s})
  590.             get(adr_l,MUIA_List_Active,{n})
  591.             StrCopy(patternlist[n],s)
  592.             doMethodA(adr_l,[MUIM_List_Redraw,n])
  593.         CASE ID_VIEWACT
  594.             get(adr_activen,MUIA_String_Contents,{s})
  595.             StringF(cmd,'run >NIL: multiview "\s"',s)
  596.             Execute(cmd,NIL,NIL)
  597.         CASE ID_VALRES
  598.             resetvalues()
  599.             patternlist[]:=String(80)
  600.             patternlist[1]:=NIL
  601.             patternlen:=1
  602.             doMethodA(adr_l,[MUIM_List_InsertSingle,patternlist[],MUIV_List_Insert_Bottom])
  603.             set(adr_l,MUIA_List_Active,0)
  604.         CASE ID_VALINI
  605.             resetvalues()
  606.             thandler:=Open('env:Birdie.Prefs',OLDFILE)
  607.             IF thandler<> NIL
  608.                 startStat:=ReadStr(thandler,cmd)
  609.                 Close(thandler)
  610.                 parse()
  611.             ENDIF
  612.         CASE ID_VALLST
  613.             resetvalues()
  614.             thandler:=Open('envarc:Birdie.Prefs',OLDFILE)
  615.             IF thandler<> NIL
  616.                 startStat:=ReadStr(thandler,cmd)
  617.                 Close(thandler)
  618.                 parse()
  619.             ENDIF
  620.         CASE ID_TEST
  621.             tested:=TRUE
  622.             use(FL_NONE)
  623. /*            set(adr_busy,MUIA_Busy_Speed,MUIV_Busy_Speed_Off)*/
  624.             set(adr_stat,MUIA_Text_Contents,cat.msgiReady.getstr())
  625.             set(app,MUIA_Application_Sleep,FALSE)
  626.         CASE ID_USE
  627.             use(FL_EXIT)
  628.             tested:=FALSE
  629.         CASE ID_SAVE
  630.             use(FL_EXIT OR FL_SAVE)
  631.             tested:=FALSE
  632.         ENDSELECT
  633.         IF sigs THEN Wait(sigs)
  634.     ENDWHILE
  635. EXCEPT DO
  636.     IF muimasterbase
  637.         IF exception THEN Mui_RequestA(app,window,0,cat.msgfMain.getstr(),0,exception,0)
  638.         IF exception THEN WriteF('\s\n\s',cat.msgfMain.getstr(),exception)
  639.     ELSE
  640.         IF exception THEN WriteF('\s\n\s',cat.msgfMain.getstr(),exception)
  641.     ENDIF
  642.     IF app THEN Mui_DisposeObject(app)
  643.     IF gmenuobj THEN Mui_DisposeObject(gmenuobj)
  644.     IF vmenuobj THEN Mui_DisposeObject(vmenuobj)
  645.     IF cl_mgroup THEN Mui_DeleteCustomClass(cl_mgroup)
  646.     IF cl_mslider THEN Mui_DeleteCustomClass(cl_mslider)
  647.     IF cl_mimage THEN Mui_DeleteCustomClass(cl_mimage)
  648.     IF cl_pslider THEN Mui_DeleteCustomClass(cl_pslider)
  649.     IF muimasterbase THEN CloseLibrary(muimasterbase)
  650.     cat.close()
  651.     IF localebase THEN CloseLibrary(localebase)
  652. ENDPROC
  653.  
  654. PROC breakbirdie()
  655. DEF exec:PTR TO execbase
  656.     exec:=execbase
  657.     task:=0
  658.     Disable()
  659.     searchIn(exec.taskwait)
  660.     searchIn(exec.taskready)
  661.     Enable()
  662.     IF task
  663.         Signal(task,SIGBREAKF_CTRL_C)
  664.     ELSE
  665.         Mui_RequestA(app,window,0,cat.msgrMain.getstr(),0,cat.msgrNoProc.getstr(),0)
  666.     ENDIF
  667. ENDPROC
  668.  
  669. PROC waitquit()
  670. DEF exec:PTR TO execbase
  671.     exec:=execbase
  672.     set(adr_stat,MUIA_Text_Contents,cat.msgiWaiting.getstr())
  673.     REPEAT
  674.         Delay(10)
  675.         task:=0
  676.         Disable()
  677.         searchIn(exec.taskwait)
  678.         searchIn(exec.taskready)
  679.         Enable()
  680.         IF CtrlC() THEN Raise('Aborted while waiting for Birdie to exit..')
  681.     UNTIL task=0
  682. ENDPROC
  683.  
  684. PROC searchIn(from:PTR TO lh) HANDLE
  685. DEF name,len,cli:PTR TO commandlineinterface,exectask:PTR TO tc,k[6]:STRING
  686.     exectask:=from.head
  687.     WHILE exectask.ln.succ
  688.         IF exectask.ln.type=NT_PROCESS AND (cli:=BADDR(exectask::process.cli))
  689.             name:=BADDR(cli.commandname)
  690.             len:=name[];name++
  691.             IF len
  692.                 StrCopy(k,name+len-6)
  693.                 IF StrCmp(LowerStr(k),'birdie',6)
  694.                     task:=exectask
  695.                 ENDIF
  696.             ENDIF
  697.         ENDIF
  698.         exectask:=exectask.ln.succ
  699.     ENDWHILE
  700. EXCEPT DO
  701. ENDPROC
  702.  
  703. PROC use(flags)
  704. DEF stop=FALSE,t:PTR TO CHAR
  705. /*    set(adr_busy,MUIA_Busy_Speed,MUIV_Busy_Speed_User)*/
  706.     breakbirdie()
  707.     writecmd()
  708.     waitquit()
  709.     IF flags AND FL_EXIT -> If we'll have to exit then store to env...
  710.         REPEAT
  711.             thandler:=Open('env:Birdie.Prefs',NEWFILE)
  712.             IF thandler
  713. /*              IF InStr(cmd,'NoXmas') = -1
  714.                     StrAdd(cmd,' NoXmas')
  715.                 ENDIF*/
  716.                 set(adr_stat,MUIA_Text_Contents,cat.msgiSave.getstr())
  717.                 tstdout:=SetStdOut(thandler)
  718.                 WriteF('\s',cmd)
  719.                 SetStdOut(tstdout)
  720.                 Close(thandler)
  721.                 stop:=TRUE
  722.             ELSEIF Mui_RequestA(app,window,0,cat.msgrNoSaveT.getstr(),cat.msgrNoSaveB.getstr(),cat.msgrNoSave.getstr(),0) = 2
  723.                 stop:=TRUE
  724.             ENDIF
  725.         UNTIL stop
  726.         Execute('Run >NIL: Birdie ? <Env:Birdie.Prefs',NIL,NIL)
  727.         set(window,MUIA_Window_CloseRequest,MUI_TRUE)
  728.     ELSE
  729.         t:=String(StrLen(cmd)+20)
  730.         StringF(t,'Run >NIL: Birdie \s',cmd)
  731.         set(adr_stat,MUIA_Text_Contents,cat.msgiRun.getstr())
  732.         Execute(t,NIL,NIL)
  733.         DisposeLink(t)
  734.     ENDIF
  735.     IF flags AND FL_SAVE
  736.         Execute('Copy >NIL: env:Birdie.prefs envarc:',NIL,NIL)
  737.     ENDIF
  738. ENDPROC
  739.  
  740. PROC parse(sini=FALSE) -> IF sini (set initial) is true, the object's MUIA_Cmenu_Initial will be set.
  741. DEF trim:PTR TO CHAR,fn -> fn equals `filename'
  742.  
  743.     patternlen:=-1
  744.  
  745.     IF (InStr(LowerStr(cmd),'activepattern') <> -1) OR (StrCmp(MidStr(btmp,cmd,0,13),'activepattern'))
  746.         activep:=1
  747.     ELSE
  748.         activep:=0
  749.     ENDIF
  750.  
  751.     trim:=TrimStr(cmd)
  752.  
  753.     space:=-1        -> space is the position of the separator (and not the beginning of a word).
  754.  
  755.     REPEAT
  756.         pos:=space+1 -> here we set pos to the beginning of the studied word.
  757.  
  758.         IF trim[pos]=34 ->(«"»): if the argument begins with a "...
  759.             space:=InStr(trim,'"',pos+1)+1 -> get the next " and add one. (to be on the separator following)
  760.             IF space=-1 -> no closing " found. We'll do like if there were one at the end..
  761.                 MidStr(btmp,trim,pos+1)
  762.             ELSE
  763.                 MidStr(btmp,trim,pos+1,space-pos-2)
  764.                 IF trim[space]=0 THEN space:=-1 -> if space is on the end of the string, set it to -1. (This will cause the loop to abort)
  765.             ENDIF
  766.             fn:=TRUE -> filename
  767.         ELSE
  768.             fn:=FALSE
  769.             space:=InStr(trim,' ',pos+1)  /*pos->space = current word*/
  770.             IF space=-1
  771.                 MidStr(btmp,trim,pos)
  772.             ELSE
  773.                 MidStr(btmp,trim,pos,space-pos)
  774.             ENDIF
  775.  
  776.             IF EstrLen(btmp)>0
  777.                 IF StrCmp(btmp,'lra')
  778.                     pos:=space+1;space:=InStr(trim,' ',pos)
  779.                     MidStr(tmp,trim,pos,space-pos)
  780.                     set(adr_lra,MUIA_Slider_Level,Val(tmp))
  781.                     IF sini THEN set(adr_lra,MUIA_Cmenu_Initial,Val(tmp))
  782.                 ELSEIF StrCmp(btmp,'lga')
  783.                     pos:=space+1;space:=InStr(trim,' ',pos)
  784.                     MidStr(tmp,trim,pos,space-pos)
  785.                     set(adr_lga,MUIA_Slider_Level,Val(tmp))
  786.                     IF sini THEN set(adr_lga,MUIA_Cmenu_Initial,Val(tmp))
  787.                 ELSEIF StrCmp(btmp,'lba')
  788.                     pos:=space+1;space:=InStr(trim,' ',pos)
  789.                     MidStr(tmp,trim,pos,space-pos)
  790.                     set(adr_lba,MUIA_Slider_Level,Val(tmp))
  791.                     IF sini THEN set(adr_lba,MUIA_Cmenu_Initial,Val(tmp))
  792.                 ELSEIF StrCmp(btmp,'dra')
  793.                     pos:=space+1;space:=InStr(trim,' ',pos)
  794.                     MidStr(tmp,trim,pos,space-pos)
  795.                     set(adr_dra,MUIA_Slider_Level,Val(tmp))
  796.                     IF sini THEN set(adr_dra,MUIA_Cmenu_Initial,Val(tmp))
  797.                 ELSEIF StrCmp(btmp,'dga')
  798.                     pos:=space+1;space:=InStr(trim,' ',pos)
  799.                     MidStr(tmp,trim,pos,space-pos)
  800.                     set(adr_dga,MUIA_Slider_Level,Val(tmp))
  801.                     IF sini THEN set(adr_dga,MUIA_Cmenu_Initial,Val(tmp))
  802.                 ELSEIF StrCmp(btmp,'dba')
  803.                     pos:=space+1;space:=InStr(trim,' ',pos)
  804.                     MidStr(tmp,trim,pos,space-pos)
  805.                     set(adr_dba,MUIA_Slider_Level,Val(tmp))
  806.                     IF sini THEN set(adr_dba,MUIA_Cmenu_Initial,Val(tmp))
  807.                 ELSEIF StrCmp(btmp,'nobitmaps')
  808.                     set(adr_nobmp,MUIA_Selected,MUI_TRUE)
  809.                     IF sini THEN set(adr_nobmp,MUIA_Cmenu_Initial,MUI_TRUE)
  810.                 ELSEIF StrCmp(btmp,'noiconborder')
  811.                     set(adr_noborder,MUIA_Selected,MUI_TRUE)
  812.                     IF sini THEN set(adr_noborder,MUIA_Cmenu_Initial,MUI_TRUE)
  813.                 ELSEIF StrCmp(btmp,'floodmaskmwb')
  814.                     set(adr_flood,MUIA_Selected,MUI_TRUE)
  815.                     IF sini THEN set(adr_flood,MUIA_Cmenu_Initial,MUI_TRUE)
  816.                 ELSEIF StrCmp(btmp,'nolighting')
  817.                     set(adr_nolight,MUIA_Selected,MUI_TRUE)
  818.                     IF sini THEN set(adr_nolight,MUIA_Cmenu_Initial,MUI_TRUE)
  819.                 ELSEIF StrCmp(btmp,'pubscreens')
  820.                     set(adr_pubscreens,MUIA_Selected,MUI_TRUE)
  821.                     IF sini THEN set(adr_pubscreens,MUIA_Cmenu_Initial,MUI_TRUE)
  822.                 ELSEIF StrCmp(btmp,'exclude=',8)
  823.                     MidStr(tmp,btmp,8)
  824.                     set(adr_exclude,MUIA_String_Contents,tmp)
  825.                     set(adr_doexcl,MUIA_Selected,MUI_TRUE)
  826.                     IF sini
  827.                         set(adr_exclude,MUIA_Cmenu_Initial,tmp)
  828.                         set(adr_doexcl,MUIA_Cmenu_Initial,MUI_TRUE)
  829.                     ENDIF
  830.                 ELSEIF StrCmp(btmp,'precision=',10)
  831.                     MidStr(tmp,btmp,10)
  832.                     set(adr_precision,MUIA_Slider_Level,Val(tmp))
  833.                     IF sini THEN set(adr_precision,MUIA_Cmenu_Initial,Val(tmp))
  834.                 ELSEIF StrCmp(btmp,'imposelevel=',12)
  835.                     MidStr(tmp,btmp,12)
  836.                     set(adr_activelvl,MUIA_Slider_Level,Val(tmp))
  837.                     IF sini THEN set(adr_activelvl,MUIA_Cmenu_Initial,Val(tmp))
  838.                 ELSEIF StrCmp(btmp,'activecolor=',12)
  839.                     MidStr(tmp,btmp,12,2)
  840.                     StringF(s2,'$\s',tmp)
  841.                     set(adr_colour,MUIA_Coloradjust_Red,Shl(Val(s2),24))
  842.                     MidStr(tmp,btmp,14,2)
  843.                     StringF(s2,'$\s',tmp)
  844.                     set(adr_colour,MUIA_Coloradjust_Green,Shl(Val(s2),24))
  845.                     MidStr(tmp,btmp,16,2)
  846.                     StringF(s2,'$\s',tmp)
  847.                     set(adr_colour,MUIA_Coloradjust_Blue,Shl(Val(s2),24))
  848.                     set(adr_activec,MUIA_Group_ActivePage,0)
  849.                 ELSEIF Not(StrCmp(btmp,'activepattern'))
  850.                     fn:=TRUE -> not very nice but should work: if this couldn't be parsed, then assume it's a filename.
  851.                 ENDIF
  852.             ENDIF
  853.         ENDIF
  854.         IF fn
  855.             IF activep=1
  856.                 activep:=0
  857.                 set(adr_activen,MUIA_String_Contents,btmp)
  858.                 set(adr_activec,MUIA_Group_ActivePage,1)
  859.             ELSE
  860.                 patternlen++
  861.                 patternlist[patternlen]:=String(80)
  862.                 StrCopy(patternlist[patternlen],btmp)
  863.             ENDIF
  864.         ENDIF
  865.         IF CtrlC()
  866.             space:=-1
  867.         ENDIF
  868.     UNTIL space = -1
  869.  
  870.     patternlen++
  871.     patternlist[patternlen]:=NIL
  872.  
  873.     set(adr_current,MUIA_String_Contents,patternlist[])
  874.     doMethodA(adr_l,[MUIM_List_Insert,patternlist,-1,MUIV_List_Insert_Bottom])
  875.     set(adr_l,MUIA_List_Active,MUIV_List_Active_Top)
  876.  
  877. ENDPROC TRUE
  878.  
  879. PROC writecmd()
  880.     StrCopy(cmd,'')
  881.     get(adr_lra,MUIA_Slider_Level,{n})
  882.     IF n <> 60
  883.         StringF(tmp,' lra \d',n)
  884.         StrAdd(cmd,tmp)
  885.     ENDIF
  886.     get(adr_lga,MUIA_Slider_Level,{n})
  887.     IF n <> 60
  888.         StringF(tmp,' lga \d',n)
  889.         StrAdd(cmd,tmp)
  890.     ENDIF
  891.     get(adr_lba,MUIA_Slider_Level,{n})
  892.     IF n <> 60
  893.         StringF(tmp,' lba \d',n)
  894.         StrAdd(cmd,tmp)
  895.     ENDIF
  896.     get(adr_dra,MUIA_Slider_Level,{n})
  897.     IF n <> -60
  898.         StringF(tmp,' dra \d',n)
  899.         StrAdd(cmd,tmp)
  900.     ENDIF
  901.     get(adr_dga,MUIA_Slider_Level,{n})
  902.     IF n <> -60
  903.         StringF(tmp,' dga \d',n)
  904.         StrAdd(cmd,tmp)
  905.     ENDIF
  906.     get(adr_dba,MUIA_Slider_Level,{n})
  907.     IF n <> -60
  908.         StringF(tmp,' dba \d',n)
  909.         StrAdd(cmd,tmp)
  910.     ENDIF
  911.     get(adr_nobmp,MUIA_Selected,{n})
  912.     IF n=MUI_TRUE THEN StrAdd(cmd,' Nobitmaps')
  913.     get(adr_noborder,MUIA_Selected,{n})
  914.     IF n=MUI_TRUE THEN StrAdd(cmd,' NoIconBorder')
  915.     get(adr_flood,MUIA_Selected,{n})
  916.     IF n=MUI_TRUE THEN StrAdd(cmd,' FloodMaskMwb')
  917.     get(adr_nolight,MUIA_Selected,{n})
  918.     IF n=MUI_TRUE THEN StrAdd(cmd,' NoLighting')
  919.     get(adr_pubscreens,MUIA_Selected,{n})
  920.     IF n=MUI_TRUE THEN StrAdd(cmd,' PubScreens')
  921.     get(adr_doexcl,MUIA_Selected,{n})
  922.     IF n = MUI_TRUE
  923.         get(adr_exclude,MUIA_String_Contents,{s})
  924.         StringF(tmp,' Exclude=\s',s)
  925.         StrAdd(cmd,tmp)
  926.     ENDIF
  927. /*    get(adr_noxmas,MUIA_Selected,{n})
  928.     IF n=MUI_TRUE THEN StrAdd(cmd,' NoXmas')
  929. */    get(adr_precision,MUIA_Slider_Level,{n})
  930.     IF n <> -1
  931.         StringF(tmp,' precision=\d',n)
  932.         StrAdd(cmd,tmp)
  933.     ENDIF
  934.  
  935.     get(adr_active,MUIA_Selected,{n})
  936.     IF n = MUI_TRUE
  937.         get(adr_activec,MUIA_Group_ActivePage,{n})
  938.         IF n=1 -> Pattern
  939.             get(adr_activen,MUIA_String_Contents,{s})
  940.             StringF(tmp,' ActivePattern "\s"',s)
  941.             StrAdd(cmd,tmp)
  942.         ELSE -> Colour
  943.             get(adr_colour,MUIA_Coloradjust_Red,{red})
  944.             get(adr_colour,MUIA_Coloradjust_Green,{green})
  945.             get(adr_colour,MUIA_Coloradjust_Blue,{blue})
  946.  
  947.             red:=Shr(red,24)
  948.             green:=Shr(green,24)
  949.             blue:=Shr(blue,24)
  950.             IF red < 0 THEN red:=256+red
  951.             IF green < 0 THEN green:=256+green
  952.             IF blue < 0 THEN blue:=256+blue
  953.             StringF(tmp,' ActiveColor=\z\h[2]\z\h[2]\z\h[2]',red,green,blue)
  954.             StrAdd(cmd,tmp)
  955.             get(adr_activelvl,MUIA_Slider_Level,{n})
  956.             IF n <> 50
  957.                 StringF(tmp,' ImposeLevel=\d',n)
  958.                 StrAdd(cmd,tmp)
  959.             ENDIF
  960.         ENDIF
  961.     ENDIF
  962.     FOR n:=0 TO patternlen-1
  963.         StringF(tmp,' "\s"',patternlist[n])
  964.         StrAdd(cmd,tmp)
  965.     ENDFOR
  966. ENDPROC
  967.  
  968. PROC resetvalues()
  969.     set(adr_lra,MUIA_Slider_Level,60)
  970.     set(adr_lga,MUIA_Slider_Level,60)
  971.     set(adr_lba,MUIA_Slider_Level,60)
  972.     set(adr_dra,MUIA_Slider_Level,-60)
  973.     set(adr_dga,MUIA_Slider_Level,-60)
  974.     set(adr_dba,MUIA_Slider_Level,-60)
  975.     set(adr_nobmp,MUIA_Selected,FALSE)
  976.     set(adr_noborder,MUIA_Selected,FALSE)
  977.     set(adr_flood,MUIA_Selected,FALSE)
  978.     set(adr_nolight,MUIA_Selected,FALSE)
  979.     set(adr_pubscreens,MUIA_Selected,FALSE)
  980. ->    set(adr_noxmas,MUIA_Selected,FALSE)
  981.     set(adr_active,MUIA_Selected,MUI_TRUE)
  982.     set(adr_precision,MUIA_Slider_Level,-1)
  983.     set(adr_activec,MUIA_Group_ActivePage,1)
  984.     set(adr_activen,MUIA_String_Contents,'')
  985.  
  986.  
  987.     doMethodA(adr_l,[MUIM_List_Clear])
  988.     FOR n:=0 TO patternlen-1 DO DisposeLink(patternlist[n])
  989. ENDPROC
  990.